package base_init

import (
	"github.com/gin-gonic/gin"
	"go-likaladi-shop/common/base_config"
	"go.uber.org/zap"
	"strconv"
)

func GinBasicConfig(filePath string, rawVal any) {
	// InitLogger 函数用于初始化日志系统，设置全局日志实例
	Logger()

	//初始化config.yaml文件配置信息
	YmlConfig(filePath, rawVal)

	//初始化翻译，注册参数校验
	Trans("zh")

	//初始化自定义参数校验规则
	CustomValidate()
}

func GinStartServer(port int, engineFunc func() *gin.Engine, config base_config.ConsulConfig, register *base_config.Register) {
	//创建一个默认的 Gin 引擎，初始化相关路由映射
	engine := engineFunc()

	// 使用 Sugared Logger 的 Infof 方法输出日志
	zap.S().Infof("启动服务器，端口: %d", port)

	var registerService RegisterService = &HttpRegisterService{
		Consul:   config,
		Register: register,
	}
	client, serviceID := registerService.ConsulRegister(port)

	go func() {
		// 启动 Gin 服务器，并监听指定端口
		if err := engine.Run(":" + strconv.Itoa(port)); err != nil {
			// 如果启动失败，记录日志并终止程序
			zap.S().Panic("启动失败", err.Error())
		}
	}()

	ConsulDeregister(serviceID, client)
}
